/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.agi.fs;

import java.io.EOFException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Classe que representa o arquivo
 * @author renatogrosz@yahoo.com - www.araujogrosz.com.br
 */
public class Arquivo extends ObjetoPersistente{
    private int size;
    private List<char[]> data;

    private Iterator <char[]> i;


    private EstadoArquivo estado;
    public Arquivo(String nome){
        super.nome=nome;
        size=0;
        estado=EstadoArquivo.NOVO;
        data=new ArrayList<char[]>();
    }

    @Override
    public void abrir() throws IOException {
        estado=estado.abrir();
        super.abrir();
        i=data.iterator();
    }

    public void escrever(char[] data) throws IOException{
        estado=estado.escrever();
        this.data.add(data);
        size=size+data.length;
    }

    @Override
    public void fechar() throws IOException{
        estado=estado.fechar();
        super.fechar();
    }


    public int size(){
        return(size);
    }

    public char[] ler() throws IOException{
        char[] retorno;


        estado=estado.ler();

        retorno=null;

        if(i.hasNext()){
            retorno=i.next();
        }else{
            throw new EOFException("Aquivo chegou ao final");
        }
        return(retorno);
    }

    @Override
    public String toString(){
        String retorno;
        String simbolo;
        int valor;

        if(size<1000){
            simbolo="b" ;
            valor=size;
        }else if(size<1000000){
            simbolo="K";
            valor=size/1000000;
        }else if(size<1000000000){
            simbolo="M";
            valor=size/1000000000;
        }else{
            simbolo="G";
            valor =size/1000000000;
        }
        retorno=nome+ " " + valor + simbolo;
        return(retorno);
    }
}
